#!/bin/bash

# ESP32项目一键烧录脚本
# 支持指定端口和波特率

# 默认参数
PORT="/dev/ttyUSB0"
BAUD_RATE=921600
BUILD_DIR="build"

# 显示帮助信息
show_help() {
    echo "ESP32项目一键烧录脚本"
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -p, --port PORT       指定串口设备 (默认: /dev/ttyUSB0)"
    echo "  -b, --baud BAUD_RATE  指定烧录波特率 (默认: 921600)"
    echo "  -d, --dir BUILD_DIR   指定构建目录 (默认: build)"
    echo "  -h, --help            显示此帮助信息"
    echo ""
    echo "示例:"
    echo "  $0                          # 使用默认参数烧录"
    echo "  $0 -p /dev/ttyUSB1 -b 115200 # 指定端口和波特率"
}

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -p|--port)
            PORT="$2"
            shift 2
            ;;
        -b|--baud)
            BAUD_RATE="$2"
            shift 2
            ;;
        -d|--dir)
            BUILD_DIR="$2"
            shift 2
            ;;
        -h|--help)
            show_help
            exit 0
            ;;
        *)
            echo "未知选项: $1"
            show_help
            exit 1
            ;;
    esac
done

# 检查构建目录是否存在
if [ ! -d "$BUILD_DIR" ]; then
    echo "错误: 构建目录 '$BUILD_DIR' 不存在"
    echo "请先执行 'idf.py build' 编译项目"
    exit 1
fi

# 检查串口设备是否存在
if [ ! -e "$PORT" ]; then
    echo "警告: 串口设备 '$PORT' 不存在"
    echo "可用的串口设备:"
    ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null || echo "  未找到可用的串口设备"
fi

# 执行烧录
echo "开始烧录ESP32项目..."
echo "串口设备: $PORT"
echo "波特率: $BAUD_RATE"
echo "构建目录: $BUILD_DIR"
echo ""

# 使用esptool.py进行烧录
esptool.py \
    --chip esp32 \
    --port "$PORT" \
    --baud $BAUD_RATE \
    --before default_reset \
    --after hard_reset \
    write_flash \
    -z \
    --flash_mode dio \
    --flash_freq 40m \
    --flash_size detect \
    0x1000 $BUILD_DIR/bootloader/bootloader.bin \
    0x8000 $BUILD_DIR/partition_table/partition-table.bin \
    0x10000 $BUILD_DIR/esp32_project.bin

# 检查烧录结果
if [ $? -eq 0 ]; then
    echo ""
    echo "烧录成功完成!"
    echo "设备将在几秒钟后重启并运行新固件"
else
    echo ""
    echo "烧录失败，请检查错误信息"
    exit 1
fi